package org.mbcorp.sar.dao;

import java.util.Date;
import java.util.List;

import org.mbcorp.sar.model.Horario;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface HorarioDAO extends JpaRepository<Horario, Integer> {
	
	@Query("SELECT h FROM Horario h WHERE h.operador.id = :idOperador AND h.flagBaja = FALSE AND h.flagIgnorado = FALSE")
    public List<Horario> buscarPorOperador(@Param("idOperador") Integer idOperador);
	
	@Query("SELECT h FROM Horario h WHERE h.fase.solicitud.id= :idSolicitud AND h.operador.id = :idOperador AND h.flagBaja = FALSE AND h.flagIgnorado = TRUE")
    public List<Horario> buscarIgnorados(@Param("idOperador") Integer idOperador, @Param("idSolicitud") Integer idSolicitud);
	
	@Query("SELECT h FROM Horario h WHERE h.operador.id is null and h.flagRestringido = TRUE AND h.flagBaja = FALSE AND h.flagIgnorado = FALSE")
    public List<Horario> buscarRestringidosGlobales();
	
	@Query("SELECT h FROM Horario h WHERE (h.flagRestringido = TRUE OR h.operador.id = :idOperador) AND h.flagBaja = FALSE AND h.flagIgnorado = FALSE ORDER BY h.fechaInicio ASC")
    public List<Horario> buscarTodosPorOperador(@Param("idOperador") Integer idOperador);
	
	@Query("SELECT h FROM Horario h, Operador o WHERE h.fase.fechaInicio IS NOT NULL AND h.fase.fechaFin IS NULL AND h.fase.solicitud.flagBaja = FALSE AND o.login = :login AND h.operador = o.id")
    public List<Horario> buscarHorariosActivosPorOperador(@Param("login")String loginOperadorActual);
	
	@Query("SELECT h FROM Horario h, Operador o WHERE h.fase.fechaInicio BETWEEN :fechainicio AND :fechafin AND h.fase.fechaFin IS NULL AND h.fase.solicitud.flagBaja = FALSE AND o.login = :login AND h.operador = o.id")
    public List<Horario> buscarHorariosActivosPorOperadorFecha(@Param("login")String loginOperadorActual, @Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin);

	@Query("SELECT h FROM Horario h, Operador o WHERE (h.fase.solicitud.solicitante.cliente.razonSocial like %:cliente% OR h.fase.solicitud.solicitante.cliente.nombreComercial like %:cliente% ) AND h.fase.fechaInicio IS NOT NULL AND h.fase.fechaFin IS NULL AND h.fase.solicitud.flagBaja = FALSE AND o.login = :login AND h.operador = o.id")
    public List<Horario> buscarHorariosActivosPorOperadorCliente(@Param("login")String loginOperadorActual, @Param("cliente")String cliente);

	@Query("SELECT h FROM Horario h, Operador o WHERE h.fase.fechaInicio BETWEEN :fechainicio AND :fechafin AND (h.fase.solicitud.solicitante.cliente.razonSocial like %:cliente% OR h.fase.solicitud.solicitante.cliente.nombreComercial like %:cliente% ) AND h.fase.fechaFin IS NULL AND h.fase.solicitud.flagBaja = FALSE AND o.login = :login AND h.operador = o.id")
    public List<Horario> buscarHorariosActivosPorOperadorFechaCliente(@Param("login")String loginOperadorActual, @Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin, @Param("cliente")String cliente);

}